import java.io.*; public class StringManager { /* cadena de caracteres a procesar */ private String str; /* arreglo booleano que tendra un valor false si el caracter i-esimo es letra, y un valor true si es caracter de puntuacion */ private boolean mapaPuntuacion[]; /* arreglo de caracteres de puntuacion */ private char[] puntuacion = {'-','<' , '(' , ' ' , '\"' , '.' , '\'' , ',' , ';' , ':' , '>' , ')' , '?' , '!' }; /* constructor de la clase, instancia un nuevo string y ademas hace la llamada del metodo que mapea en terminos de 0's y 1's los caracteres */ public StringManager(String str_in) { str = new String(str_in); if (str.length() > 0) { mapaPuntuacion = new boolean[str.length()]; asignaMapaDePuntuacion(); } } /* de acuerdo si los caracteres son o no de puntuacion, crea un arreglo booleano */ private int asignaMapaDePuntuacion() { int len_puntuacion = puntuacion.length; int cont = 0; for(int k = 0; k < str.length(); k++) { mapaPuntuacion[k] = false; for(int i = 0; i < len_puntuacion; i++) { if (str.charAt(k) == puntuacion[i] ) { mapaPuntuacion[k] = true; cont++; i = len_puntuacion; } } } return cont; } /* de acuerdo al mapa de caracteres va extrayendo las subcadenas que tienen sus valores en false. Una vez finalizado retorna el string de resultado. */ public String extraerPalabras() { String tmp = ""; int pos = 0; int len; boolean esPuntuacion = false; for(int i = 0; i < mapaPuntuacion.length; i++) { if (mapaPuntuacion[i] == true) continue; else { len = 0; pos = i; while (!mapaPuntuacion[i]) { i++; len++; } tmp += str.substring(pos,pos + len) + " "; } } return tmp; } public int puntuacionInicial() { int cont = 0; while(mapaPuntuacion[cont] == true) { cont++; } return cont; } public int puntuacionFinal() { int i = str.length() - 1; int cont = 0; while(mapaPuntuacion[i] == true) { cont++; i--; } return cont; } public int puntuacionMedia(int numCar_ini, int numCar_fin) { int cont = 0; int p = numCar_ini; int u = mapaPuntuacion.length - 1 - numCar_fin; while(p <= u) { if (mapaPuntuacion[p++]) cont++; } return cont; } public void verMapa() { String aux = "\t"; for(int i = 0; i < mapaPuntuacion.length; i++) { if (mapaPuntuacion[i] == true) aux += "1"; else aux += "0"; } System.out.println(aux); } public static void main(String args[]) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String entrada; int seguir = 1; System.out.println("\n"); while(seguir == 1) { System.out.print("Ingrese frase : "); entrada = in.readLine(); StringManager strm = new StringManager(entrada); System.out.println("\n\tMapa : "); strm.verMapa(); System.out.println("la entrada sin puntuacion es : \n"); System.out.println(strm.extraerPalabras()); int pi,pf,pm; pi = strm.puntuacionInicial(); pf = strm.puntuacionFinal(); pm = strm.puntuacionMedia(pi,pf); System.out.println("Puntuacion inicial : " + pi); System.out.println("Puntuacion media : " + pm); System.out.println("Puntuacion final : " + pf); System.out.print("\nsalir(0) , seguir(1) : "); seguir = Integer.parseInt(in.readLine()); } } }